做另一面的自己

Android Api 23+ 权限请求问题

如申请 ==PERMISSION_REQUEST_READ_STORAGE==为例。

1.在AndroidManifest申请权限

1
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

这样要是在Api 23以下的机器,权限申请工作就算完成了。

2.onCreate 中检查权限是否被赋予,

1
2
3
4
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
startMainActivity();
}

3.如果权限没有被申请,开始申请权限

1
2
3
4
ActivityCompat.requestPermissions(
this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
PERMISSION_REQUEST_READ_STORAGE);

这个方法的注释非常详细,可以查看api文档。

4.这个activity实现ActivityCompat.OnRequestPermissionsResultCallback接口,用户点击是否授权会有回调方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
* Callback received when a permissions request has been completed.
*/
@Override
public void onRequestPermissionsResult(
int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
String permissionResult = "Request code: " + requestCode + ", Permissions: " + permissions
+ ", Results: " + grantResults;
Log.d(TAG, "onRequestPermissionsResult(): " + permissionResult);
if (requestCode == PERMISSION_REQUEST_READ_STORAGE) {
// Close activity regardless of user's decision (decision picked up in main activity).
startMainActivity();
}
}